home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C ++ / Applications / TimGA 1.2.1 / .h / CNode.h < prev    next >
Encoding:
Text File  |  1997-07-16  |  5.7 KB  |  236 lines  |  [TEXT/CWIE]

  1. // ===========================================================================
  2. //    CNode.h            ©1995-97 Timo Eloranta            All rights reserved.
  3. // ===========================================================================
  4. //    A simple node class. 
  5.  
  6. #pragma once
  7.  
  8. #include <PP_Types.h>
  9. #include <iterator.h>    // MSL
  10.  
  11. class CNode
  12. {
  13.     private:
  14.         short        mNodeNbr;        // Number of the node
  15.         
  16.         short        mPosX;            // Position in the grid: X
  17.         short        mPosY;            // Position in the grid: Y
  18.         
  19.         Boolean        mHasMoved;        // Has this node moved?
  20.  
  21.     public:
  22.                 CNode();
  23.     
  24.         void     Set(            short, short, short );
  25.  
  26.         void     SetNodePos(        short inX,
  27.                                 short inY );
  28.         
  29.         CNode     &operator=(        const CNode & inNode );
  30.  
  31.         Int16     GetNodeNbr()                             const;
  32.         void     GetNodeNbr(        short & outNbr)         const;
  33.         
  34.         Boolean HasPosition(    const Int16 inX,
  35.                                 const Int16 inY )         const;
  36.         
  37.         void     GetNodePos(        short & x,
  38.                                 short & y )             const;
  39.                                 
  40.         void     GetNodePos(        Point & outPos )         const;
  41.  
  42.         void    Draw(             const Rect & inOneOneRect,
  43.                                 Int16 inSquareSize )     const;
  44.  
  45.         Int16    DistanceTo(        const CNode & inNode )    const;
  46.         
  47.         Boolean    GetHasMoved()                            const;
  48.         void    ResetHasMoved();
  49. };
  50.  
  51. typedef CNode*    CNodePtr;
  52.  
  53. // ===========================================================================
  54. // • Inline Functions
  55. // ===========================================================================
  56.  
  57. // ———————————————————————————————————————————————————————————————————————————
  58. //    •    Set
  59. //
  60. //          Called by:    CNode::CNode
  61. //                        CNode::operator=
  62. //                        CGraphNodes::ClearAll
  63. //                        CGraphNodes::SetNode
  64. // ———————————————————————————————————————————————————————————————————————————
  65.  
  66. inline void 
  67. CNode::Set( short inNbr, short inX, short inY )
  68. {
  69.     mNodeNbr    = inNbr;
  70.  
  71.     mPosX        = inX;
  72.     mPosY        = inY;
  73.     
  74.     mHasMoved    = true;
  75. }
  76.  
  77. // ———————————————————————————————————————————————————————————————————————————
  78. //    •    SetNodePos
  79. //
  80. //          Called by:    CGraphNodes::SetNodePos
  81. //                        CGraphNodes::SwapRows
  82. //                        CGraphNodes::SwapCols
  83. //                        CGraphNodes::SwapInRowOrCol
  84. //                        CGraphNodes::LargeContMutate
  85. //                        CGraphNodes::InvertPartRow
  86. //                        CGraphNodes::InvertPartCol
  87. // ———————————————————————————————————————————————————————————————————————————
  88. //    Set new coordinates to this node and mark it as a mover.
  89.  
  90. inline void 
  91. CNode::SetNodePos( short inX, short inY )
  92. {
  93.     mPosX = inX;
  94.     mPosY = inY;
  95.     
  96.     mHasMoved = true;
  97. }
  98.  
  99. // ———————————————————————————————————————————————————————————————————————————
  100. //    •    CNode
  101. //
  102. //          Called by:    CGraphNodes::Initialize
  103. // ———————————————————————————————————————————————————————————————————————————
  104.  
  105. inline
  106. CNode::CNode()
  107. {
  108.     Set( 0, 0, 0 );
  109. }
  110.  
  111. // ———————————————————————————————————————————————————————————————————————————
  112. //    •    operator=
  113. //
  114. //          Called by:    ?::?    (I'm sure this is used _somewhere_ ...)
  115. // ———————————————————————————————————————————————————————————————————————————
  116.  
  117. inline CNode & 
  118. CNode::operator=( const CNode & inNode )
  119. {
  120.     Set(    inNode.mNodeNbr,
  121.             inNode.mPosX,
  122.             inNode.mPosY );
  123.     
  124.     return *this;
  125. }
  126.  
  127. // ———————————————————————————————————————————————————————————————————————————
  128. //    •    GetNodeNbr
  129. //
  130. //          Called by:    CGraphDrawing::ThreeNodeCrossover
  131. //                        CGraphNodes::TinyMoveEdge
  132. //                        CGraphNodes::MoveEdge
  133. //                        CGraphNodes::Move3ConnectedNodes
  134. //                        CGraphNodes::RectCrossover
  135. // ———————————————————————————————————————————————————————————————————————————
  136.  
  137. inline short 
  138. CNode::GetNodeNbr( void ) const
  139. {
  140.     return mNodeNbr;
  141. }
  142.  
  143. // ———————————————————————————————————————————————————————————————————————————
  144. //    •    GetNodeNbr
  145. //
  146. //          Called by:    CEdge::GetNodeNumbers
  147. //                        CGraphNodes::SmallMutate
  148. // ———————————————————————————————————————————————————————————————————————————
  149.  
  150. inline void 
  151. CNode::GetNodeNbr( short & nbr) const
  152. {
  153.     nbr = mNodeNbr;
  154. }
  155.  
  156. // ———————————————————————————————————————————————————————————————————————————
  157. //    •    HasPosition
  158. //
  159. //          Called by:    CGraphNodes::NodeInSquare
  160. // ———————————————————————————————————————————————————————————————————————————
  161. //    Returns true, if this node is in location (inX,inY).
  162.  
  163. inline Boolean
  164. CNode::HasPosition( const Int16 inX, const Int16 inY ) const
  165. {
  166.     return ( mPosX == inX &&
  167.              mPosY == inY );
  168. }
  169.  
  170. // ———————————————————————————————————————————————————————————————————————————
  171. //    •    GetNodePos
  172. //
  173. //          Called by:    CEdge::Intersects
  174. //                        CEdge::Draw
  175. //                        CEdge::SetLength
  176. //                        CGraphDrawing::ThreeNodeCrossover
  177. //                        CGraphNodes::TinyMutate
  178. //                        CGraphNodes::TinyMoveEdge etc.
  179. // ———————————————————————————————————————————————————————————————————————————
  180.  
  181. inline void 
  182. CNode::GetNodePos( Point & outPos) const
  183. {
  184.     outPos.h = mPosX;
  185.     outPos.v = mPosY;
  186. }
  187.  
  188. inline void 
  189. CNode::GetNodePos( short & outX, short & outY ) const
  190. {
  191.     outX = mPosX;
  192.     outY = mPosY;
  193. }
  194.  
  195. // ———————————————————————————————————————————————————————————————————————————
  196. //    •    DistanceTo
  197. //
  198. //          Called by:    CGraphNodes::BruteForceClosestPairs
  199. // ———————————————————————————————————————————————————————————————————————————
  200. //    Square of distance from this node to inNode. 
  201. //    Squares are used since taking square roots would be too slow.
  202.  
  203. inline Int16 
  204. CNode::DistanceTo( const CNode & inNode) const
  205. {
  206.     Int16    theDiffX = mPosX - inNode.mPosX;
  207.     Int16    theDiffY = mPosY - inNode.mPosY;
  208.  
  209.     return    ( ( theDiffX * theDiffX ) + 
  210.               ( theDiffY * theDiffY ) );
  211. }
  212.  
  213. // ———————————————————————————————————————————————————————————————————————————
  214. //    •    GetHasMoved
  215. //
  216. //          Called by:    CEdge::HasMoved
  217. // ———————————————————————————————————————————————————————————————————————————
  218.  
  219. inline Boolean 
  220. CNode::GetHasMoved() const
  221. {
  222.     return mHasMoved;
  223. }
  224.  
  225. // ———————————————————————————————————————————————————————————————————————————
  226. //    •    ResetHasMoved
  227. //
  228. //          Called by:    CGraphNodes::ResetAll
  229. // ———————————————————————————————————————————————————————————————————————————
  230.  
  231. inline void 
  232. CNode::ResetHasMoved()
  233. {
  234.     mHasMoved = false;
  235. }
  236.